package cn.yiyuan.base.until.loginContxet;

import cn.yiyuan.auth.entity.EmpEntity;
import cn.yiyuan.auth.entity.ShopEntity;
import org.apache.commons.lang3.StringUtils;

import javax.servlet.http.HttpServletRequest;
import java.util.Objects;

/**
 * 登录上下文：把登录后的一些信息，缓存到这里面，其他地方来获取使用
 * 1 登录用户
 * 2 登录用户权限
 *  存储登录用户信息    redis  static-Map session
 *  获取登录用户信息   redis static-map session
 */
public class LoginContext {

    /**
     * 登录成功后调用
     * @param loginUser
     */
    public static void setLoginAdmin(EmpEntity loginUser){
        //暂时不实现--要存放session,redis

    }


    /**
     * 获取登录用户
     * @return
     */
    public static EmpEntity getLoginAdmin(HttpServletRequest request){
        // 1 获取请求头中的token
        String token = request.getHeader("token");
        // 2 如果token为空,说明没有登录,返回"没有登录"的错误信息
        // 在实际的项目开发中,如果token为空,要返回错误信息,但是我们现在这儿先不返回错误信息,先返回一个默认的Employee
        EmpEntity employee = null;
        if(StringUtils.isBlank(token)){
            employee = new EmpEntity();
            employee.setId(347L);
            employee.setUsername("admin");
            ShopEntity shop = new ShopEntity();
            shop.setId(58L);
            shop.setName("宝马高新4s店");
            employee.setShopEntity(shop);
            return employee;
        //从session或者redis中获取  现在模拟获取一个用户

    }
        // 3 如果token不为空,通过token作为key到map/redis/session中获取value
//        employee = ContextMap.loginMap.get(token);

        // 4 如果value值为空,说明没有登录,返回"没有登录"的错误信息
        // 和上边一样,先返回一个默认值,先不报错
        if(Objects.isNull(employee)){
            employee = new EmpEntity();
            employee.setId(347L);
            employee.setUsername("admin");
            ShopEntity shop = new ShopEntity();
            shop.setId(58L);
            shop.setName("宝马高新4s店");
            employee.setShopEntity(shop);
            return employee;
        }
        // 5 如果value不为空,就返回value
        return employee;
    }
}